﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTRecursoService.Dominio;
using System.Data.SqlClient;



namespace RESTRecursoService.Persistencia
{
    public class ReservaDAO
    {

        public Reserva Crear(Reserva reservaACrear)
        {
            Reserva reservaCreado = null;
            string sql = "INSERT INTO t_Recurso values(@cod, @fecha, @ini, @fin, @can, @cli, @mon, @est)";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", reservaACrear.Codigo));
                    com.Parameters.Add(new SqlParameter("@fec", reservaACrear.Fecha));
                    com.Parameters.Add(new SqlParameter("@ini", reservaACrear.Inicio));
                    com.Parameters.Add(new SqlParameter("@fin", reservaACrear.Fin));
                    com.Parameters.Add(new SqlParameter("@can", reservaACrear.Cancha));
                    com.Parameters.Add(new SqlParameter("@cli", reservaACrear.Cliente));
                    com.Parameters.Add(new SqlParameter("@mon", reservaACrear.Monto));
                    com.Parameters.Add(new SqlParameter("@est", reservaACrear.Estado));
                    com.ExecuteNonQuery();
                }
            }
            reservaCreado = Obtener(reservaACrear.Codigo);
            return reservaCreado;
        }

        public Reserva Obtener(int codigo)
        {
            Reserva reservaEncontrada = null;
            int codigo1;
            string fecha1;
            int inicio1;
            int fin1;
            int cancha1;
            int cliente1;
            int monto1;
            string estado1;
            string cadena1 = "";
            string sql = "select r.codigo, r.fecha, r.inicio, r.fin, r.cancha, t.nombre as nombrecancha, r.cliente, s.nombre from t_Recurso r, t_Cancha t, t_cliente s where r.cancha=t.codigo and r.cliente=s.codigo and r.codigo=@cod ";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", Convert.ToInt32(codigo)));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            codigo1 = (int)resultado["codigo"];
                            fecha1  = (string)resultado["fecha"];
                            inicio1 = (int)resultado["inicio"];
                            fin1    = (int)resultado["fin"];
                            cancha1 = Convert.ToInt32(resultado["cancha"]);
                            cliente1 = Convert.ToInt32(resultado["cliente"]);
                            monto1 = Convert.ToInt32(resultado["monto"]);
                            estado1 = (string)resultado["estado"];
                            cadena1 = codigo1 + "";
                            reservaEncontrada = new Reserva()
                            {
                                Codigo  = codigo1,
                                Fecha   = fecha1,
                                Inicio  = inicio1,
                                Cancha  = cancha1,
                                NombreCancha = (string)resultado["nombrecancha"],
                                Cliente = cliente1,
                                NombreCliente = (string)resultado["nombrecliente"],
                                Monto = monto1,
                                Estado  = estado1
                            };
                        }
                    }
                }
            }
            return reservaEncontrada;
        }

        public Reserva Modificar(Reserva reservaAModificar)
        {
            //TODO:
            Reserva reservaModificada = null;
            string sql = "UPDATE t_Reserva SET fecha =@fec, inicio=@ini, fin=@fin, cancha=@can, cliente=@cli, monto=@mon, estado=@est WHERE codigo=@cod ";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", reservaAModificar.Codigo));
                    com.Parameters.Add(new SqlParameter("@fec", reservaAModificar.Fecha));
                    com.Parameters.Add(new SqlParameter("@ini", reservaAModificar.Inicio));
                    com.Parameters.Add(new SqlParameter("@fin", reservaAModificar.Fin));
                    com.Parameters.Add(new SqlParameter("@can", reservaAModificar.Cancha));
                    com.Parameters.Add(new SqlParameter("@cli", reservaAModificar.Cliente));
                    com.Parameters.Add(new SqlParameter("@mon", reservaAModificar.Monto));
                    com.Parameters.Add(new SqlParameter("@est", reservaAModificar.Estado));
                    com.ExecuteNonQuery();
                }
            }
            reservaModificada = Obtener(reservaAModificar.Codigo);
            return reservaModificada;
        }

        public void Eliminar(int codigo)
        {
            //TODO:

            string sql = "DELETE t_Reserva WHERE codigo=@cod ";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", codigo));
                    com.ExecuteNonQuery();
                }
            }

        }

        public List<Reserva> ListarTodos()
        {
            //TODO:
            Reserva reservaListados = null;
            int codigo1;
            string fecha1;
            int inicio1;
            int fin1;
            int cancha1;
            int cliente1;
            int monto1;
            string estado1;
            string cadena1 = "";
            List<Reserva> lista = new List<Reserva>();
            string sql = "select r.codigo, r.fecha, r.inicio, r.fin, r.cancha, t.nombre as nombrecancha, r.cliente, s.nombre from t_Recurso r, t_Cancha t, t_cliente s where r.cancha=t.codigo and r.cliente=s.codigo and r.codigo=@cod ";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            codigo1 = (int)resultado["codigo"];
                            fecha1  = (string)resultado["fecha"];
                            inicio1 = (int)resultado["inicio"];
                            fin1    = (int)resultado["fin"];
                            cancha1 
                                = Convert.ToInt32(resultado["cancha"]);
                            cliente1= Convert.ToInt32(resultado["cliente"]);
                            monto1 = Convert.ToInt32(resultado["monto"]);
                            estado1 = (string)resultado["estado"];
                            cadena1 = codigo1 + "";
                            reservaListados = new Reserva()
                            {
                                Codigo = codigo1,
                                Fecha = fecha1,
                                Inicio = inicio1,
                                Cancha = cancha1,
                                NombreCancha = (string)resultado["nombrecancha"],
                                Cliente = cliente1,
                                NombreCliente = (string)resultado["nombrecliente"],
                                Monto = monto1,
                                Estado = estado1
                            };
                            lista.Add(reservaListados);

                        }

                    }
                }
            }
            return lista;
        }

    }
}